package com.springcloudalibaba.baserocketmq.service;

import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.producer.TransactionSendResult;

/**
 * @description: RocketMq消息服务
 * @author: lixing
 * @time: 2021/6/8 21:04
 */
public interface RocketMqService<T> {
    /**
     * @描述 发送普通消息
     * @作者 lixing
     * @日期 2021/6/8 21:07
     * @Param [topic, messageBody] 

     */
    void sendSimpleMsg(String topic, T messageBody);

    /**
     * @描述 发送【同步】【无序】消息
     * @作者 lixing
     * @日期 2021/6/8 21:11
     * @Param [topic, messageBody, timeout]

     */
    SendResult sendSyncMsg(String topic, T messageBody, long timeout, int delayLevel);

    /**
     * @描述 发送【同步】【有序】消息
     * @作者 lixing
     * @日期 2021/6/8 21:11
     * @Param [topic, messageBody, timeout]

     */
    SendResult sendSyncMsg(String topic, T messageBody, String hashKey, long timeout);

    /**
     * @描述 发送【异步】【无序】消息
     * @作者 lixing
     * @日期 2021/6/8 21:19
     * @Param [topic, messageBody, sendCallback, timeout, delayLevel] 

     */
    void sendAsyncMsg(String topic, T messageBody, long timeout, int delayLevel);

    /**
     * @描述 发送【异步】【有序】消息
     * @作者 lixing
     * @日期 2021/6/8 21:19
     * @Param [topic, messageBody, sendCallback, timeout, delayLevel]

     */
    void sendAsyncMsgOrderly(String topic, T messageBody, String hashKey, long timeout);

    /**
     * @描述 发送事务消息
     * @作者 lixing
     * @日期 2021/6/8 21:24
     * @Param [topic, tag, msg] 
     * @return TransactionSendResult
     */
    TransactionSendResult sendMessageIntransaction(String topic, String tag, String msg);
}
